여러 개의 JPEG_Encoder_Gray 오퍼레이터를 병렬로 사용

간략한 설명

파일:
\examples\Processing\Compression\JPEG\mE5-MA-VCL\Operator_JPEG_Encoder_Gray\Multi\JPEG_Gray_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCL\Operator_JPEG_Encoder_Gray\Multi\JPEG_Color_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCL\Operator_JPEG_Encoder_Gray\Multi\Software
\examples\Processing\Compression\JPEG\mE5-MA-VCX-QP\Operator_JPEG_Encoder_Gray\JPEG_Gray_CXP_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCX-QP\Operator_JPEG_Encoder_Gray\JPEG_Color_CXP_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCX-QP\Operator_JPEG_Encoder_Gray\Software

기본 플랫폼:
mE5-MA-VCL
mE5-MA-VCX-QP

요약 설명

JPEG_Encoder_Gray 오퍼레이터를 병렬로 사용하여 JPEG 압축 대역폭을 향상합니다.

이 예제는 JPEG_Encoder_Gray의 JPEG 압축 대역폭 제한을 극복하는 방법을 보여주도록 설계되었습니다. 이를 달성하기 위해 여러 오퍼레이터가 병렬로 사용됩니다. marathon mE5 VCL 플랫폼용 예제가 두 가지 존재합니다. JPEG_Gray 예제는 네 개의 오퍼레이터를 병렬로 사용하여 풀 구성(full configuration) 그레이스케일 이미지를 인코딩합니다. JPEG_Color 예제는 여섯 개의 오퍼레이터를 사용하여 크로마(Chroma) 구성요소에 대해 수평 및 수직 방향으로 서브샘플링된 베이어(Bayer) 카메라의 이미지를 인코딩합니다.

JPEG Gray - VisualApplets Design

이 디자인은 네 개의 JPEG_Encoder_Gray 오퍼레이터를 사용하여 최대 1200MP/s의 대역폭으로 이미지를 인코딩합니다(이는 풀 구성의 CameraLink 카메라에 충분한 대역폭입니다).
JPEG 스트림은 런길이 인코딩(runlength encoding)을 기반으로 합니다. 각 스트림은 DC 파트로 시작하여 여러 개의 AC 컴포넌트가 그 뒤를 이룹니다. 따라서 이미지를 여러 인코더로 분할하려면 일정한 간격으로 인코딩을 다시 시작해야 합니다. JPEG 포맷에서는 재시작 마커(restart marker)를 사용하여 이를 수행할 수 있습니다. 따라서 VisualApplets 디자인은 이미지를 8라인(최소 부호화 단위(MCU)의 1라인) 블록으로 분할합니다. 각 MCU 라인의 끝에는 재시작 마커가 삽입됩니다.

기본 설계 구조

그림 276. 기본 디자인 구조


그림 276에서 일반적인 앱릿을 볼 수 있습니다. 압축과 관련하여 흥미로운 세 가지 계층적 상자(JPEGBlockSorter8x8, SplitImage, SYNC)가 있습니다. JPEGBlockSorter8x8(그림 277)에서 8라인의 데이터가 8x8 픽셀 블록으로 재정렬됩니다. 이 블록들은 연속해서 전송됩니다.
이미지를 다루기 쉽게 유지하기 위해 치수는 동일하게 유지됩니다.
SplitImage(그림 279)는 이미지를 DRAM에 저장하고, 4개의 연속된 라인이 4개의 독립된 MCU 블록 라인을 주소 지정하도록 라인을 재정렬합니다. 이러한 방식으로 MCU 블록 라인 스트림을 분할하여 4개의 독립된 인코더로 전송할 수 있습니다.
SYNC는 인코딩된 스트림을 수집하고, 끝부분의 정보 태그를 재시작 마커로 교체한 후 모든 라인을 하나의 이미지로 추가합니다.

JPEGBlockSorter8x8 상자의 내용

그림 277. JPEGBlockSorter8x8 상자의 내용


먼저 8개의 픽셀이 하나의 "블록 픽셀"로 추가됩니다. 정렬 상자(Sort Box)에서 그림 278과 같이 각 라인의 블록 픽셀이 차례대로 이어지도록 이 "블록 픽셀"들이 배열됩니다.

JPEGBlockSorter8x8에서의 픽셀 재정렬

그림 278. JPEGBlockSorter8x8에서의 픽셀 재정렬


SplitImage(그림 279) 상자는 JPEGBlockSorter8x8(그림 277)의 라인들을 항상 4개의 블록이 개별적으로 전송되는 체계로 재정렬합니다. 각 블록은 8개의 라인으로 구성됩니다. 이 절차는 모든 라인이 전송될 때까지 반복됩니다.
Split 상자에서 이미지는 4개의 이미지로 분할됩니다. 이는 이미지에 속하지 않는 각 링크의 모든 라인을 제거하여 수행됩니다. 이러한 하위 이미지들은 높이가 8인 이미지로 분할되므로, 앱릿이 8라인의 끝에 재시작 간격을 삽입할 수 있습니다.

SplitImage 상자의 내용

그림 279. SplitImage 상자의 내용


SYNC 상자는 각 JPEG_Converter의 스트림을 하나의 이미지로 결합합니다. 이는 세 단계로 수행됩니다. 먼저 최종 바이트(0xFFD9 - 이미지의 끝 마커 + 오퍼레이터의 정보)를 제거 대상으로 표시합니다. 이 작업은 RemoveFillByte 상자(그림 280)에서 수행됩니다. 둘째, 블록 사이에 재시작 마커가 추가됩니다. JPEG 스트림의 재시작 마커는 "0xFFDx" 구조를 가지며, 여기서 x는 라운드 로빈(round robin) 방식으로 카운트되는 0부터 7까지의 값입니다. 이 작업은 RestartMarker 상자(그림 277)에서 수행됩니다. 셋째, 사용되지 않는 바이트가 제거됩니다.

RemoveFillByte 상자의 내용

그림 280. RemoveFillByte 상자의 내용


RestartMarker 상자의 내용

그림 281. RestartMarker 상자의 내용


이 앱릿에서 출력되는 이미지 데이터를 사용하려면 헤더에 재시작 정보를 추가해야 합니다. 이는 헤더에 DRI 마커(0xFF DD)를 추가하여 수행됩니다.

JPEG Color - VisualApplets Design

기본 설계 구조

그림 282. 기본 설계 구조


이 예제는 기본적으로 그레이 예제와 동일합니다. 차이점은 다음과 같습니다.
1. Bayer 변환의 RGB 데이터가 YCrCb colorspace로 변환됩니다.
2. Cr 및 Cb 성분이 서브샘플링됩니다.
3. 분리된 이미지는 별도의 버퍼에 버퍼링됩니다. 더미 라인을 삽입하지 않고 6개의 컨버터로 라인을 정렬하려면 독립적인 sorting buffer가 필요합니다.
4. Sync를 높이가 다른 세 개의 서로 다른 이미지로 분할해야 합니다.

서브샘플링된 이미지에서 restart intervals를 사용하려면 샘플링 팩터를 채널의 최소 MCU 수에 맞게 조정해야 합니다. 4:2:0 서브샘플링을 사용합니다. 즉, Cr 및 Cb 이미지의 라인 너비가 절반에 불과합니다. 그렇기 때문에 모든 restart markers를 동일한 위치에 배치하려면 Y 이미지에서도 라인을 반으로 분할해야 합니다.